Yuki Matsumoto

To be engneer soon / Ruby on Rails

コントローラーのedit, deleteアクションの追加

2019-11-28 Yuki MatsumotoRuby on Rails

今日はコントローラーのedit, destroyアクションを追加したのでメモする。

ルーティングの設定

ルートに editdestroy を追加する。

Rails.application.routes.draw do
  devise_for :users
  root 'tweets#index'

  resources :tweets, only: %i(new create edit destroy)
end

edit機能の実装

まずはコントローラーにeditアクションを追加していく

def edit
    @tweet = Tweet.find(params[:id])
    
  end

はい、これだけ。次にeditアクションのviewを作成する。まずはindexに表示される”編集”の挙動部分を作る。

<div class="text-right pb-1">
  <button type="button", class="btn btn-outline-secondary">
    <%= link_to "編集", edit_tweet_path(tweet) %>
  </button>
</div>

次にindexから編集ボタンを押した先の編集画面を作成。

<div class="card tweet-card">
  <div class="card-header">
    編集する
  </div>
  <div class="card-body">
    <%= form_with model: @tweet do |f| %>
      <div class="tweet-body">
        <%= image_tag current_user.profile_photo, class: "avatar avatar-size32" %>
        <%= f.text_area :text, class: "form-control", rows: "3" %>
      </div>
      <div class="buttons">
        <%= f.submit "保存", class: "btn btn-primary tweet-btn" %>
      </div>
    <% end %>
  </div>
</div>

基本は new.html.erb と一緒。文言だけ一部修正。共通化は明日以降かな。

delete機能の実装

同じくコントローラーにdestroyアクションを追加していく

def edit
    @tweet = Tweet.find(params[:id])
end

次にdestroyアクションのviewを作成する。

<div class="text-right pb-1">
  <button type="button", class="btn btn-outline-secondary">
    <%= link_to "編集", edit_tweet_path(tweet) %>
  </button>
  <button type="button", class="btn btn-outline-secondary">
    <%= link_to "削除", tweet_path(tweet), method: :delete, data: {confirm: "削除していいですか?"} %>
  </button>
</div>

これで編集と削除機能の実装は完了。明日はタグ機能やる予定!